home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / e / e_modules02.lha / e_modules02 / crc / fcrc.e next >
Encoding:
Text File  |  1996-07-31  |  1.9 KB  |  69 lines

  1. OPT OSVERSION=37
  2. OPT PREPROCESS,REG=5
  3.  
  4. /*
  5. *-- AutoRev header do NOT edit!
  6. *
  7. *   Project         :   compute CRC (cyclic redundancy code)
  8. *   File            :   fcrc.e
  9. *   Copyright       :   © Piotr Gapiïski
  10. *   Author          :   Piotr Gapiïski
  11. *   Creation Date   :   30.07.96
  12. *   Current version :   1.1
  13. *   Translator      :   AmigaE v3.2e
  14. *
  15. *   REVISION HISTORY
  16. *
  17. *   Date          Version         Comment
  18. *   ---------     -------         ------------------------------------------
  19. *   05.01.96      1.0             first, internal release...
  20. *   30.07.96      1.1             bug fix
  21. *
  22. *-- REV_END --*
  23. */
  24.  
  25. MODULE 'dos/dos','dos/dosextens',
  26.        'tools/exceptions','tools/crc'
  27.  
  28. #define FAST
  29. #define PROGRAMVERSION '$VER: fcrc v1.1 (30.07.96)'
  30. #define CLI_TEMPLATE 'FILE/A'
  31. #define MSG_CLI_NOARGS  'Bad args!\n'
  32. #define MSG_CLI_NOFILE  'Couldn\at find file "\s"!\n'
  33. #define MSG_CLI_EMPTYFILE 'Requested file is empty...\n'
  34. #define MSG_CLI_NOMEMORY 'No free memory...\n'
  35.  
  36. CONST PUDDLESIZE=10*1024
  37. ENUM  ARG_FILE,NUMARGS
  38.  
  39. PROC main() HANDLE
  40.   DEF rdargs=0,args[NUMARGS]:LIST,handle=0,size,mem=NIL,crc=0
  41.  
  42.   IF (rdargs:=ReadArgs(CLI_TEMPLATE,args:=[NIL,NIL],NIL))=NIL THEN Raise(MSG_CLI_NOARGS)
  43.   IF (handle:=Open(args[ARG_FILE],MODE_OLDFILE))=NIL THEN Throw(MSG_CLI_NOFILE,args[ARG_FILE])
  44.   -> get filesize
  45.   Seek(handle,0,OFFSET_END)
  46.   size:=Seek(handle,0,OFFSET_BEGINNING)
  47.   -> sanity check
  48.   IF size=0 THEN Raise(MSG_CLI_EMPTYFILE)
  49.   IF size<PUDDLESIZE
  50.     mem:=New(size)
  51.   ELSEIF size>=PUDDLESIZE
  52.     mem:=New(PUDDLESIZE)
  53.   ENDIF
  54.   IF mem=NIL THEN Raise(MSG_CLI_NOMEMORY)
  55.   WriteF('FILENAME: "\s"\n',args[ARG_FILE])
  56.   REPEAT
  57.     size:=Read(handle,mem,PUDDLESIZE)
  58.     crc:=crcchecksum(mem,size,crc)
  59.   UNTIL size<>PUDDLESIZE
  60.   WriteF('     CRC: $\h\n',crc)
  61. EXCEPT DO
  62.   IF exception THEN WriteF(exception,exceptioninfo)
  63.   IF handle<>NIL THEN Close(handle)
  64.   IF mem<>NIL THEN Dispose(mem)
  65.   IF rdargs<>NIL THEN FreeArgs(rdargs)
  66. ENDPROC
  67.  
  68. CHAR PROGRAMVERSION,0
  69.